package com.insight.modules.message.handle.enums;

import com.insight.common.util.oConvertUtils;

/**
 * 发送消息类型枚举类
 * <p>
 * 定义了系统支持的消息发送方式，包括短信、邮件和微信推送，
 * 每种类型对应一个唯一的编码和实现类的全限定名。
 * </p>
 */
public enum SendMsgTypeEnum {

	/**
	 * 短信发送方式，类型编码为 "1"
	 */
	SMS("1", "com.insight.modules.message.handle.impl.SmsSendMsgHandle"),

	/**
	 * 邮件发送方式，类型编码为 "2"
	 */
	EMAIL("2", "com.insight.modules.message.handle.impl.EmailSendMsgHandle"),

	/**
	 * 微信发送方式，类型编码为 "3"
	 */
	WX("3", "com.insight.modules.message.handle.impl.WxSendMsgHandle");

	/**
	 * 消息发送类型编码
	 */
	private String type;

	/**
	 * 消息发送实现类的全限定类名
	 */
	private String implClass;

	/**
	 * 构造函数
	 *
	 * @param type 消息类型编码
	 * @param implClass 处理该类型消息的实现类全限定名
	 */
	SendMsgTypeEnum(String type, String implClass) {
		this.type = type;
		this.implClass = implClass;
	}

	/**
	 * 获取消息类型编码
	 *
	 * @return 消息类型编码字符串
	 */
	public String getType() {
		return type;
	}

	/**
	 * 设置消息类型编码
	 *
	 * @param type 消息类型编码字符串
	 */
	public void setType(String type) {
		this.type = type;
	}

	/**
	 * 获取实现类的全限定名
	 *
	 * @return 实现类全限定名字符串
	 */
	public String getImplClass() {
		return implClass;
	}

	/**
	 * 设置实现类的全限定名
	 *
	 * @param implClass 实现类全限定名字符串
	 */
	public void setImplClass(String implClass) {
		this.implClass = implClass;
	}

	/**
	 * 根据类型编码获取对应的枚举实例
	 *
	 * @param type 消息类型编码
	 * @return 对应的枚举实例，找不到则返回 null
	 */
	public static SendMsgTypeEnum getByType(String type) {
		if (oConvertUtils.isEmpty(type)) {
			return null;
		}
		for (SendMsgTypeEnum val : values()) {
			if (val.getType().equals(type)) {
				return val;
			}
		}
		return null;
	}
}

